#ifndef xpack_math_cell
#define xpack_math_cell
#pragma push_macro("xuser")
#undef  xuser
#define xuser mixc::math_cell::inc
#include"define/base_type.hpp"
#include"macro/xexport.hpp"
#include"macro/xstruct.hpp"
#pragma pop_macro("xuser")

namespace mixc::math_cell{
    #define xarg_name       cell
    #define xarg_a0         row
    #define xarg_a1         column
    #define xarg_a2         page
    #include"math/private/xgen.geometry.hpp"
}

namespace mixc::math_cell::origin{
    template<class row_t, class column_t = row_t, class page_t = void>
    using cell = mixc::math_cell::cell<row_t, column_t, page_t>;

    //                  r    c
    using cl2b  = cell<u08, u08>;
    using cl2w  = cell<u16, u16>;
    using cl2d  = cell<u32, u32>;
    using cl2q  = cell<u64, u64>;
    using cl2u  = cell<uxx, uxx>;
    using cl2bx = cell<i08, i08>;
    using cl2wx = cell<i16, i16>;
    using cl2dx = cell<i32, i32>;
    using cl2qx = cell<i64, i64>;
    using cl2x  = cell<ixx, ixx>;
    using cl2s  = cell<f32, f32>;
    using cl2f  = cell<f64, f64>;

    //                  r    c    p
    using cl3b  = cell<u08, u08, u08>;
    using cl3w  = cell<u16, u16, u16>;
    using cl3d  = cell<u32, u32, u32>;
    using cl3q  = cell<u64, u64, u64>;
    using cl3u  = cell<uxx, uxx, uxx>;
    using cl3bx = cell<i08, i08, i08>;
    using cl3wx = cell<i16, i16, i16>;
    using cl3dx = cell<i32, i32, i32>;
    using cl3qx = cell<i64, i64, i64>;
    using cl3x  = cell<ixx, ixx, ixx>;
    using cl3s  = cell<f32, f32, f32>;
    using cl3f  = cell<f64, f64, f64>;
}

#endif

xexport_space(mixc::math_cell::origin)
